Code quality is of paramount importance in a software delivery project. Bad quality not only affects the maintainability and comprehensibility of the code, it also affects the production systems in which the code is released. The impact on production systems can range from relatively hidden problems, such as non-availability of logging information (to be used for performance analyses etc.), to more overt functional defects that adversely affect an end-user's experience.
Understanding concepts constitutes a key ingredient for providing good code quality, as well as program comprehension and maintenance. Concepts can be classified into two categories: code semantic abstractions and design abstractions. Code semantic abstractions pertain to the concepts that exist solely in the code. Some examples are anti-patterns, coding idioms and abstracted task-specific coding methods such as XML parsing. Design abstractions concern patterns that offer good solutions to recurring program design problems, i.e., that result in code that exhibits good quality, reusability and maintainability. Recognizing occurrences of design patterns in source code assists in recovering the implicit low-level design of the software system.
Tools currently exist that perform concept specification and extraction at the code or compiler level. Some examples of widely used tools are: CheckStyle, PMD and Findbugs. These tools suffer from a number of limitations. For example, most current tools are equipped with a pre-defined, non-configurable (at least by the user) knowledge base for use in detecting concepts (or violations thereof) in a software project. Simple mechanisms do not exists for enriching the knowledge base.
Furthermore, most of the existing tools capture concepts pertaining to a particular language/technology and do not capture them at the design, architecture and application-domain level, i.e., at higher levels of abstraction. Additionally, most tools fail to capture concept violations that exist across different components. Further still, most tools provide a report of concept violations, i.e., where the standards or principles associated with the concept are not followed. However, such tools fail to indicate the impact of a violation on the software or to specify what actions can the user take to rectify such violations.
Improvement to such tools would represent a significant advancement of the art.